package generics;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import domain.Customer;

public class CollectionGenerics {
	public static void collectionGenerics(){
		//ArrayList list = new ArrayList(); //오브젝트 타입을 받는 어레이 리스트
		ArrayList<String> list = new ArrayList<String>();//스트링만 받는 어레이리스트
		list.add("안녕하세요");
		//list.add(30); 컴파일 에러를 확인할 수 있다
		//list.add(new Customer()); 요것도 안되고
		String s = list.get(0);//이제 형변환이고 나발이고 필요 없다. 
		Iterator<String> itr = list.iterator();//이게 이해가야 한다. Iterator Api 봐봐, 자료가 스트링만 있으니까 스트링만 찾으면 되잖아. 근데 여기에 스트링을 안쓰면 형변환을 해야한다. 
		while(itr.hasNext()){
			String str = itr.next();
		}
	}
	public static void mapGenerics(){
		HashMap<String, Customer> map = new HashMap<String, Customer>();// 이건 무슨 의미일까?
		map.put("id-1", new Customer());
		map.put(20, new Customer());//key의 타입 틀림
		map.put("id-3, "우리고객");  //벨류 타입이 틀림
		Customer c = map.get("id-1");
		
		HashMap<String, String> map2 = new HashMap<>();//jdk1.7나온 신기능. 변수에서 가변타입 선언시 생성자에서는 생략 가능
	}
}
